VRML Preparation for Robot Simulation/ru

Руководство
Тема
Верстак Робот
Уровень
Средний
Время для завершения
Авторы
FreeCAD версия
Примеры файлов
Смотрите также
None

Верстак Robot в FreeCAD остался без поддержки. Пожалуйста, сообщите на форуме FreeCAD, если Вы заинтересованы в поддержке этого верстака.

Обзор

В этом руководстве рассказывается, как использовать FreeCAD и Верстак Симуляции Робота для моделирования движений 6-осевого серийного робота. Руководство посвящено созданию VRML-файла, используемого в качестве визуализации. Основой VRML-файла является модель FreeCAD. Используемая версия FreeCAD - 0.11.4252ppa1 на Ubuntu 32bit.

Открытиеытие файла или создание файла с помощью FreeCAD

Руководство основано на STEP-файле робора Stäubli TX40 (TX40-HB.stp). Вы можете скачать этот файл с сайта Stäubli. Однако, хотя у меня не было времени проверить это, метод должен быть применим и к модели, полностью сделанной в FreeCAD. После открытия файла ты должен получить следующее:

Обрати внимание, что при импорте робот состоит из 8 фигур, расположенных непосредственно в корне дерева документа. Структура экспортируемого VRML-файла может измениться, если используются группы. Элементы расположены в порядке от основания к инструменту. Последний элемент содержит оси вращения всех осей робота. Имя корреляции фигуры - задаётся именем детали (на данный момент (март 2011) FreeCAD не импортирует имена, включённые в STEP-файлы):

FreeCAD имя STEP имя английский STEP имя русский
TX40_HB HORIZONTAL BASE CABLE OUTLET ГОРИЗОНТАЛЬНОЕ ОСНОВАНИЕ КАБЕЛЬНЫЙ ВЫВОД
TX40_HB001 SHOULDER ПЛЕЧО
TX40_HB002 ARM РУКА
TX40_HB003 ELBOW ЛОКОТЬ
TX40_HB004 FOREARM ПРЕДПЛЕЧЬЕ
TX40_HB005 WRIST ЗАПЯСТЬЕ
TX40_HB006 TOOL FLANGE ФЛАНЕЦ ИНСТРУМЕНТА
TX40_HB007 ? ?

Для этого импорта измени "Стиль представления" каждой фигуры, за исключением TX40_HB007, с "Плоские линии" на "Только грани", чтобы экспорт VRML выглядел хорошо. Я также изменил цвета на [245, 196, 0] и [204, 204, 204], чтобы они лучше соответствовали жёлтому цвету Stäubli. Скройте TX40_HB007, потому что он содержит оси всех сочленений и не может быть отсоединён.

Определение геометрических характеристик

Для того чтобы построить таблицу Денавита-Хартенберга (смотри Робот 6-Осевой) и подготовить vrml-файл, необходимо получить характеристики робота. На данный момент инструмент измерения в FreeCAD не готов, вы можете использовать оси, входящие в TX40_HB007 (координаты указываются слева внизу при наведении на объект мышью) или использовать консоль Python для получения некоторой информации о геометрии. Обратите внимание, что DH-таблица нужна только в том случае, если вам нужно использовать обратную кинематику, то есть получить декартовы координаты или управлять роботом с помощью декартовых координат. DH-таблица для этого робота выглядит следующим образом (мм, град и град/с):

i d θ r α θмин θмакс Скорость вращения оси
1 320 q1 0 -90 -180 180 555
2 35 q2 - 90 225 0 -125 125 475
3 0 q3 + 90 0 90 -138 138 585
4 225 q4 0 -90 -270 270 1035
5 0 q5 0 90 -120 133.5 1135
6 65 q6 0 0 -270 270 1575

Затем создаётся csv файл:

a  , alpha, d  , theta, rotDir, maxAngle, minAngle, AxisVelocity
0  ,   -90, 320,     0,      1,      180,     -180, 555
225,     0,  35,   -90,      1,      125,     -125, 475
0  ,    90,   0,    90,      1,      138,     -138, 585
0  ,   -90, 225,     0,      1,      270,     -270, 1035
0  ,    90,   0,     0,      1,    133.5,     -120, 1135
0  ,     0,  65,     0,      1,      270,     -270, 1575

Экспорт в VRML

Экспортируй документ в VRML-файл. Структура VRML-файла выглядит следующим образом:

#VRML V2.0 utf8


Group {
  children 
    Group {
      children [ 
        Group {
        …

        },
          
        Group {
        …

        },
          
        Group {
        …

        },
          
        Group {
        …

        },
          
        Group {
        …

        },
          
        Group {
        …

        },
          
        Group {
        …

        },
          
        Group {
        …

        } ]

    }

}

Вы можете заметить, что у нас есть 8 независимых групп, соответствующих 8 элементам.

Подготовка vrml-файла

Все элементы в VRML-файле выражены в базовом кадре, независимо друг от друга. Для Верстака Симуляции Робота нам нужно создать структуру, в которой движение одного элемента вызывает движение всех последующих элементов структуры. Расположение элементов будет относительным по отношению к предыдущему элементу, поэтому нам необходимо включить некоторые преобразования из абсолютной системы отсчета в относительную. Эти переводы описаны на следующем рисунке:

Здесь

A=(0, 0, 168)
B=(0, 107.8, 320)
C=(0, 104.15, 545)
D=(0, 35, 601)
E=(0, 35, 770)
F=(0, 35, 835).

Рассмотрим пример оси 4 между ELBOW - ЛОКТЕМ и FOREARM - ПРЕДПЛЕЧЬЕМ, расположенной в точке D=(xd, yd, zd). Привязкой для оси FreeCAD является

"DEF FREECAD_AXIS4 Transform { rotation 0 1 0 0 children ["

Это соответствует вращению вокруг оси y. В CAD-модели вращение происходит вокруг оси z. Таким образом, нам нужен поворот вокруг оси x на π перед определением оси FreeCAD и на π после него. Также перемещение (-xd, -yd, -zd) необходимо непосредственно перед группой, соответствующей определению FOREARM - ПРЕДПЛЕЧЬЯ, чтобы выразить его в относительной системе отсчета с центром в точке D. Это означает, что перемещение (xd, yd, zd) должно быть вставлено перед первым вращением. В итоге VRML-файл от определения ELBOW - ЛОКТЯ до определения FOREARM - ПРЕДПЛЕЧЬЯ выглядит следующим образом:

      # ELBOW
      Group {
        … here comes the unmodified definition of ELBOW
  
      },
        
      Transform {
        translation 0 35 601
        rotation 1 0 0 1.5707963
        children
          DEF FREECAD_AXIS4 Transform { rotation 0 1 0 0 children
            Transform {
              rotation 1 0 0 -1.5707963
              children
                Transform {
                  translation 0 -35 -601
                  children [
      # FOREARM  
      Group {
        ... here comes the unmodified definition of FOREARM
  
      },

В конце документа необходимо вставить соответствующие закрывающие скобки: ]}}}}, для каждой из 6 осей. В итоге документ выглядит так (не знаю, можно ли давать здесь ссылку на файл из-за авторских прав):

#VRML V2.0 utf8
  
  
Group {
  children
  Group {
    children [ 
      # HORIZONTAL BASE CABLE OUTLET 
      Group {
          ... here comes the unmodified definition of HORIZONTAL BASE CABLE OUTLET
   
      },
        
      Transform {
        translation 0 0 168
        rotation 1 0 0 1.5707963
        children
          DEF FREECAD_AXIS1 Transform { rotation 0 1 0 0 children
            Transform {
              rotation 1 0 0 -1.5707963
              children
                Transform {
                  translation 0 0 -168
                  children [
      # SHOULDER
      Group {
          ... here comes the unmodified definition of SHOULDER 
  
      },
        
      Transform {
        translation 0 107.8 320
        #rotation 0 0 1 0
        children
          DEF FREECAD_AXIS2 Transform { rotation 0 1 0 0 children
            Transform {
              #rotation 0 0 1 0
              children
                Transform {
                  translation 0 -107.8 -320
                  children [
      # ARM  
      Group {
          ... here comes the unmodified definition of ARM 
  
      },
        
      Transform {
        translation 0 104.15 545
        #rotation 0 0 1 0
        children
          DEF FREECAD_AXIS3 Transform { rotation 0 1 0 0 children
            Transform {
              #rotation 0 0 1 0
              children
                Transform {
                  translation 0 -104.15 -545
                  children [
      # ELBOW
      Group {
          ... here comes the unmodified definition of ELBOW
  
      },
        
      Transform {
        translation 0 35 601
        rotation 1 0 0 1.5707963
        children
          DEF FREECAD_AXIS4 Transform { rotation 0 1 0 0 children
            Transform {
              rotation 1 0 0 -1.5707963
              children
                Transform {
                  translation 0 -35 -601
                  children [
      # FOREARM  
      Group {
          ... here comes the unmodified definition of FOREARM
  
      },
        
      Transform {
        translation 0 35 770
        #rotation 0 0 1 0
        children
          DEF FREECAD_AXIS5 Transform { rotation 0 1 0 0 children
            Transform {
              #rotation 0 0 1 0
              children
                Transform {
                  translation 0 -35 -770
                  children [
      # WRIST
      Group {
          ... here comes the unmodified definition of WRIST
  
      },
        
      Transform {
        translation 0 35 835
        rotation 1 0 0 1.5707963
        children
          DEF FREECAD_AXIS6 Transform { rotation 0 1 0 0 children
            Transform {
              rotation 1 0 0 -1.5707963
              children
                Transform {
                  translation 0 -35 -835
                  children [
      # TOOL FLANGE
      Group {
          ... here comes the unmodified definition of TOOL FRAME
  
      },
        
      Group {
          ... here comes the unmodified definition of TX40_HB007
  
      } # "]" was deleted from this line
    ]}}}},
    ]}}}},
    ]}}}},
    ]}}}},
    ]}}}},
    ]}}}},
    ] # this is the "]" deleted from the line above
  }
}

Вот исправление для получения VRML-файла, подходящего для моделирования роботов:

7a8
>         # HORIZONTAL BASE CABLE OUTLET 
95968a95970,95981
>         Transform {
>           translation 0 0 168
>           rotation 1 0 0 1.5707963
>           children
>             DEF FREECAD_AXIS1 Transform { rotation 0 1 0 0 children
>               Transform {
>                 rotation 1 0 0 -1.5707963
>                 children
>                   Transform {
>                     translation 0 0 -168
>                     children [
>         # SHOULDER
128428a128442,128453
>         Transform {
>           translation 0 107.8 320
>           #rotation 0 0 1 0
>           children
>             DEF FREECAD_AXIS2 Transform { rotation 0 1 0 0 children
>               Transform {
>                 #rotation 0 0 1 0
>                 children
>                   Transform {
>                     translation 0 -107.8 -320
>                     children [
>         # ARM  
206503a206529,206540
>         Transform {
>           translation 0 104.15 545
>           #rotation 0 0 1 0
>           children
>             DEF FREECAD_AXIS3 Transform { rotation 0 1 0 0 children
>               Transform {
>                 #rotation 0 0 1 0
>                 children
>                   Transform {
>                     translation 0 -104.15 -545
>                     children [
>         # ELBOW
267111a267149,267160
>         Transform {
>           translation 0 35 601
>           rotation 1 0 0 1.5707963
>           children
>             DEF FREECAD_AXIS4 Transform { rotation 0 1 0 0 children
>               Transform {
>                 rotation 1 0 0 -1.5707963
>                 children
>                   Transform {
>                     translation 0 -35 -601
>                     children [
>         # FOREARM  
417854a417904,417915
>         Transform {
>           translation 0 35 770
>           #rotation 0 0 1 0
>           children
>             DEF FREECAD_AXIS5 Transform { rotation 0 1 0 0 children
>               Transform {
>                 #rotation 0 0 1 0
>                 children
>                   Transform {
>                     translation 0 -35 -770
>                     children [
>         # WRIST
422053a422115,422126
>         Transform {
>           translation 0 35 835
>           rotation 1 0 0 1.5707963
>           children
>             DEF FREECAD_AXIS6 Transform { rotation 0 1 0 0 children
>               Transform {
>                 rotation 1 0 0 -1.5707963
>                 children
>                   Transform {
>                     translation 0 -35 -835
>                     children [
>         # TOOL FLANGE
435627c435700,435707
<         } ]
---
>         } 
>       ]}}}},
>       ]}}}},
>       ]}}}},
>       ]}}}},
>       ]}}}},
>       ]}}}},
>       ]